package cc.md888.result;

public interface ResultCode {

    /**
     * 操作成功
     */
    ResultCode SUCCESS =  new DefaultResultCode("SUCCESS", "操作成功", true);

    /**
     * 操作失败
     */
    ResultCode ERROR =  new DefaultResultCode("ERROR", "操作失败", false);



    /**
     * 请求错误
     */
    ResultCode BAD_REQUEST = new DefaultResultCode("BAD_REQUEST", "请求错误", false);


    /**
     * 资源未找到
     */
    ResultCode NOT_FOUND = new DefaultResultCode("NOT_FOUND", "请求数据未找到", false);

    /**
     * 未认证
     */
    ResultCode UNAUTHORIZED = new DefaultResultCode("UNAUTHORIZED", "Token不正确或已过期", false);

    /**
     * 请求被拒绝
     */
    ResultCode FORBIDDEN = new DefaultResultCode("FORBIDDEN", "请求被拒绝", false);

    /**
     *  RIBBON 异常
     */
    ResultCode RIBBON_CLIENT_EXCEPTION = new DefaultResultCode("RIBBON_CLIENT", "网络开小差了~~", false);


    /**
     * 请求错误
     */
    ResultCode RESOURCE_LOCK_FAILED = new DefaultResultCode("LOCK_RESOURCE_FAILED", "操作太快啦，休息会吧~~", false);



    /**
     * 用户没有完成实名认证
     */
    ResultCode USER_NO_REAL_NAME = new DefaultResultCode("-2004", "您还没有完成实名认证，请先完成实名认证", false);


    /**
     * 用户没有完成支付
     */
    ResultCode USER_NO_PAYMENT = new DefaultResultCode("-2008", "您还没有完成支付，请先完成支付", false);


    /**
     * 网关API限流
     */
    ResultCode GATEWAY_API_LIMIT_RATE = new DefaultResultCode("GATEWAY_API_LIMIT_RATE", "前方拥堵，休息会吧~~", false);


    /**
     * 还未到取消时间
     */
    ResultCode EARLY_CANCEL_DENIED = new DefaultResultCode("EARLY_CANCEL_DENIED", "未到取消时间，请稍后再试！", false);




    /**
     * 响应结果 Code
     * @return
     */
    String getCode();

    /**
     * 响应消息
     * @return
     */
    String getMessage();

    /**
     * 是否成功
     * @return
     */
    Boolean isSuccess();


    /**
     * 生成一个 {@link ResultCode} 实例
     * @param code
     * @param message
     * @return
     */
    static ResultCode error(String code, String message){
        return new DefaultResultCode(code, message, false);
    }


    /**
     * 生成一个 {@link ResultCode} 实例
     * @param code
     * @param message
     * @return
     */
    static ResultCode ok(String code, String message){
        return new DefaultResultCode(code, message, true);
    }


}
